Kwaliteit data set beoordelen
In bovenstaande tabel hebben we al een klein beetje gekeken naar de kwaliteit van de data. We zien dat er 133 kolommen zijn en bij iedere kolom is aangegeven om welk type data het gaat. De kolom met de variabele v1 is bijvoorbeeld van het type double (dbl) en dit geeft aan dat het om een getal met decimalen gaat. Kolom v3 bevat tekst (chr) en target natuurlijke getallen (telgetallen - int).
Voor uitgebreide kwaliteitsinformatie kunnen de functies str() en summary() worden gebruikt. Functies worden altijd aangegeven met haakjes waartussen parameters geplaatst kunnen worden. In dit geval is de parameter de dataset firstDF.
## Structuur
str(firstDF[,1:10])
Classes ‘tbl_df’, ‘tbl’ and 'data.frame': 45728 obs. of 10 variables:
$ ID : int 5 6 12 31 37 39 40 43 54 57 ...
$ target: int 1 1 0 1 1 1 1 1 1 1 ...
$ v1 : num 0.944 0.797 0.9 2.26 0.944 ...
$ v2 : num 5.31 8.3 7.31 14.69 5.93 ...
$ v3 : chr "C" "C" "C" "C" ...
$ v4 : num 4.41 4.23 3.49 5.15 4.4 ...
$ v5 : num 5.33 11.63 9.95 8.55 9.05 ...
$ v6 : num 3.98 2.1 1.93 1.95 2.55 ...
$ v7 : num 3.93 1.99 1.77 2.93 2.69 ...
$ v8 : num 0.0196 0.1719 0.0663 0.0414 0.0857 ...
## Samenvatting
summary(firstDF[, 1:10])
ID target v1 v2 v3 v4
Min. : 5 Min. :0.0000 Min. : 0.000 Min. : 0.144 Length:45728 Min. : 0.128
1st Qu.: 57348 1st Qu.:1.0000 1st Qu.: 0.923 1st Qu.: 5.309 Class :character 1st Qu.: 3.475
Median :113469 Median :1.0000 Median : 1.476 Median : 7.031 Mode :character Median : 4.205
Mean :113929 Mean :0.7612 Mean : 1.642 Mean : 7.480 Mean : 4.141
3rd Qu.:170713 3rd Qu.:1.0000 3rd Qu.: 2.143 3rd Qu.: 9.479 3rd Qu.: 4.841
Max. :228712 Max. :1.0000 Max. :13.214 Max. :20.000 Max. :11.832
NA's :19847 NA's :19834 NA's :19834
v5 v6 v7 v8
Min. : 0.182 Min. : 0.000 Min. :0.000 Min. : 0.000
1st Qu.: 7.613 1st Qu.: 2.061 1st Qu.:2.102 1st Qu.: 0.086
Median : 8.674 Median : 2.410 Median :2.453 Median : 0.389
Mean : 8.741 Mean : 2.432 Mean :2.486 Mean : 1.498
3rd Qu.: 9.769 3rd Qu.: 2.772 3rd Qu.:2.838 3rd Qu.: 1.633
Max. :20.000 Max. :20.000 Max. :8.889 Max. :20.000
NA's :19374 NA's :19847 NA's :19847 NA's :19373
Vraag 1: Wat doen de functies head(), str() en summary()?
Vraag 2: Hoeveel lege waarden bevat de kolom met de variabele v2?
Vraag 3: Pas de functie
dim() toe op de dataset. Hoeveel dataregels bevat de dataset? En hoeveel kolommen?
De volgende data komt uit een Driven Data competitie. Deelnemers worden uitgedaagd door Taarifa en het Tanzaniaanse Ministerie voor Water om een model te genereren waarmee voorspeld kan worden welke waterpompen in het land een defect gaan vertonen, zodat ze kunnen worden onderhouden voordat ze daadwerkelijk uitvallen (predictive maintenance).
secDF <- read_csv("https://raw.githubusercontent.com/hanbedrijfskunde/im/master/workshops/bigdata/drivendata.csv")
head(secDF)
Vraag 1: Beoordeel de kwaliteit van de data.
We kunnen de kwaliteit van de data verder verkennen door deze te visualiseren. R biedt verschillende mogelijkheden:
colors <- c("skyblue", "orange", "tomato")
p <- ggplot(secDF) +
geom_bar(aes(x = region, fill = status_group)) +
scale_fill_manual(values = colors) +
coord_flip()
p

- grafieken met interactie:
ggplotly(p, width = 900)
- geographische weergave met interactie (klik op een cirkel voor meer informatie per waterpunt)
selDF <- secDF[1:100,]
pal <- colorFactor(colors, domain = c("functional", "functional needs repair", "non functional"))
leaflet(selDF) %>%
addTiles() %>%
setView(lng = mean(selDF$longitude), lat = mean(selDF$latitude), zoom = 6) %>%
addCircleMarkers(~longitude, ~ latitude, popup = ~wpt_name, color = ~pal(status_group))
LS0tCnRpdGxlOiAiV29ya3Nob3AgQmlnIERhdGEgQW5hbHl0aWNzIgphdXRob3I6ICJXaXRlayB0ZW4gSG92ZSIKZGF0ZTogMjktMDEtMjAxOApvdXRwdXQ6IGh0bWxfbm90ZWJvb2sKLS0tCgoKYGBge3IgbWVzc2FnZT1GQUxTRSwgd2FybmluZz1GQUxTRSwgaW5jbHVkZT1GQUxTRSwgcGFnZWQucHJpbnQ9RkFMU0V9CiMgY2hlY2sucGFja2FnZXMgZnVuY3Rpb246IGluc3RhbGwgYW5kIGxvYWQgbXVsdGlwbGUgUiBwYWNrYWdlcy4KIyBDaGVjayB0byBzZWUgaWYgcGFja2FnZXMgYXJlIGluc3RhbGxlZC4gSW5zdGFsbCB0aGVtIGlmIHRoZXkgYXJlIG5vdCwgdGhlbiBsb2FkIHRoZW0gaW50byB0aGUgUiBzZXNzaW9uLgpjaGVjay5wYWNrYWdlcyA8LSBmdW5jdGlvbihwa2cpewogICAgbmV3LnBrZyA8LSBwa2dbIShwa2cgJWluJSBpbnN0YWxsZWQucGFja2FnZXMoKVssICJQYWNrYWdlIl0pXQogICAgaWYgKGxlbmd0aChuZXcucGtnKSkgCiAgICAgICAgaW5zdGFsbC5wYWNrYWdlcyhuZXcucGtnLCBkZXBlbmRlbmNpZXMgPSBUUlVFKQogICAgc2FwcGx5KHBrZywgcmVxdWlyZSwgY2hhcmFjdGVyLm9ubHkgPSBUUlVFKQp9CgojIFVzYWdlIGV4YW1wbGUKcGFja2FnZXM8LWMoInRpZHl2ZXJzZSIsICJwbG90bHkiKQpjaGVjay5wYWNrYWdlcyhwYWNrYWdlcykKbGlicmFyeSh0aWR5dmVyc2UpCmxpYnJhcnkocGxvdGx5KQpsaWJyYXJ5KGxlYWZsZXQpCmBgYAoKIyMgRGF0YSBpbmxlemVuCgpEZSBkYXRhIGtvbXQgdWl0IGVlbiA8YSBocmVmPSJodHRwczovL3d3dy5rYWdnbGUuY29tL2MvYm5wLXBhcmliYXMtY2FyZGlmLWNsYWltcy1tYW5hZ2VtZW50IiB0YXJnZXQ9Il9ibGFuayI+S2FnZ2xlIGNvbXBldGl0aWU8L2E+IGVuIGdhYXQgb3ZlciBoZXQgcHJvY2VzIHZhbiBjbGFpbWFmaGFuZGVsaW5nIGJpaiBlZW4gZ3JvdGUgdmVyemVrZXJpbmdzbWFhdHNjaGFwcGlqLiBEZSBvcGRyYWNodCB2YW4gZGUgY29tcGV0aXRpZSB3YXMgb20gZWVuIG1vZGVsIHRlIGJvdXdlbiBkYXQgYmlubmVua29tZW5kZSBjbGFpbXMga2FuIGNhdGVnb3Jpc2VyZW4gbmFhciAnc25lbCBhZmhhbmRlbGJhYXInIGVuICduYWRlcmUgY29udHJvbGUgbm9kaWcnLiBEZSBvb3JzcHJvbmtlbGlqayBkYXRhc2V0IGhhZCBlZW4gb212YW5nIHZhbiAxMTAgTUIgKG1lZXIgZGFuIDEwMC4wMDAgcmVnZWxzKS4gVm9vciBlZW4gc25lbGxlcmUgbGFhZHRpamQgaXMgZGUgZGF0YXNldCBtZXQgNjAlIGdlcmVkdWNlZXJkIChtZXQgYmVob3VkIHZhbiB2ZXJob3VkaW5nZW4pLgoKYGBge3IgZWNobz1UUlVFLCBtZXNzYWdlPUZBTFNFLCB3YXJuaW5nPUZBTFNFLCBwYWdlZC5wcmludD1UUlVFfQpmaXJzdERGIDwtIHJlYWRfY3N2KCJodHRwczovL3Jhdy5naXRodWJ1c2VyY29udGVudC5jb20vaGFuYmVkcmlqZnNrdW5kZS9pbS9tYXN0ZXIvd29ya3Nob3BzL2JpZ2RhdGEva2FnZ2xlLmNzdiIpCmhlYWQoZmlyc3RERikKYGBgCgojIyBLd2FsaXRlaXQgZGF0YSBzZXQgYmVvb3JkZWxlbgoKSW4gYm92ZW5zdGFhbmRlIHRhYmVsIGhlYmJlbiB3ZSBhbCBlZW4ga2xlaW4gYmVldGplIGdla2VrZW4gbmFhciBkZSBrd2FsaXRlaXQgdmFuIGRlIGRhdGEuIFdlIHppZW4gZGF0IGVyIGByIGRpbShmaXJzdERGKVsyXWAga29sb21tZW4gemlqbiBlbiBiaWogaWVkZXJlIGtvbG9tIGlzIGFhbmdlZ2V2ZW4gb20gd2VsayB0eXBlIGRhdGEgaGV0IGdhYXQuIERlIGtvbG9tIG1ldCBkZSB2YXJpYWJlbGUgYHYxYCBpcyBiaWp2b29yYmVlbGQgdmFuIGhldCB0eXBlIGRvdWJsZSAoYGRibGApIGVuIGRpdCBnZWVmdCBhYW4gZGF0IGhldCBvbSBlZW4gZ2V0YWwgbWV0IGRlY2ltYWxlbiBnYWF0LiBLb2xvbSBgdjNgIGJldmF0IHRla3N0IChgY2hyYCkgZW4gIGB0YXJnZXRgIG5hdHV1cmxpamtlIGdldGFsbGVuICh0ZWxnZXRhbGxlbiAtIGBpbnRgKS4KClZvb3IgdWl0Z2VicmVpZGUga3dhbGl0ZWl0c2luZm9ybWF0aWUga3VubmVuIGRlIGZ1bmN0aWVzIGBzdHIoKWAgZW4gYHN1bW1hcnkoKWAgd29yZGVuIGdlYnJ1aWt0LiBGdW5jdGllcyB3b3JkZW4gYWx0aWpkIGFhbmdlZ2V2ZW4gbWV0IGhhYWtqZXMgd2FhcnR1c3NlbiBwYXJhbWV0ZXJzIGdlcGxhYXRzdCBrdW5uZW4gd29yZGVuLiBJbiBkaXQgZ2V2YWwgaXMgZGUgcGFyYW1ldGVyIGRlIGRhdGFzZXQgYGZpcnN0REZgLgoKYGBge3IgZWNobz1UUlVFLCBtZXNzYWdlPUZBTFNFLCB3YXJuaW5nPUZBTFNFLCBwYWdlZC5wcmludD1UUlVFfQojIyBTdHJ1Y3R1dXIKc3RyKGZpcnN0REZbLDE6MTBdKQpgYGAKCmBgYHtyIGVjaG89VFJVRSwgbWVzc2FnZT1GQUxTRSwgd2FybmluZz1GQUxTRSwgcGFnZWQucHJpbnQ9VFJVRX0KIyMgU2FtZW52YXR0aW5nCnN1bW1hcnkoZmlyc3RERlssIDE6MTBdKQpgYGAKCjxocj4KKipWcmFhZyAxOioqIFdhdCBkb2VuIGRlIGZ1bmN0aWVzIGBoZWFkKClgLCBgc3RyKClgIGVuIGBzdW1tYXJ5KClgPwoKKipWcmFhZyAyOioqIEhvZXZlZWwgbGVnZSB3YWFyZGVuIGJldmF0IGRlIGtvbG9tIG1ldCBkZSB2YXJpYWJlbGUgYHYyYD8KCioqVnJhYWcgMzoqKiBQYXMgZGUgZnVuY3RpZSBgZGltKClgIHRvZSBvcCBkZSBkYXRhc2V0LiBIb2V2ZWVsIGRhdGFyZWdlbHMgYmV2YXQgZGUgZGF0YXNldD8gRW4gaG9ldmVlbCBrb2xvbW1lbj8KPGhyPgoKRGUgdm9sZ2VuZGUgZGF0YSBrb210IHVpdCBlZW4gPGEgaHJlZj0iaHR0cHM6Ly93d3cuZHJpdmVuZGF0YS5vcmcvY29tcGV0aXRpb25zLzcvcHVtcC1pdC11cC1kYXRhLW1pbmluZy10aGUtd2F0ZXItdGFibGUvcGFnZS8yNS8iIHRhcmdldD0iX2JsYW5rIj5Ecml2ZW4gRGF0YSBjb21wZXRpdGllPC9hPi4gRGVlbG5lbWVycyB3b3JkZW4gdWl0Z2VkYWFnZCBkb29yIDxhIGhyZWY9Imh0dHA6Ly90YWFyaWZhLm9yZy8iIHRhcmdldD0iX2JsYW5rIj5UYWFyaWZhPC9hPiBlbiBoZXQgPGEgaHJlZj0iaHR0cDovL21hamkuZ28udHovIiB0YXJnZXQ9Il9ibGFuayI+VGFuemFuaWFhbnNlIE1pbmlzdGVyaWUgdm9vciBXYXRlcjwvYT4gb20gZWVuIG1vZGVsIHRlIGdlbmVyZXJlbiB3YWFybWVlIHZvb3JzcGVsZCBrYW4gd29yZGVuIHdlbGtlIHdhdGVycG9tcGVuIGluIGhldCBsYW5kIGVlbiBkZWZlY3QgZ2FhbiB2ZXJ0b25lbiwgem9kYXQgemUga3VubmVuIHdvcmRlbiBvbmRlcmhvdWRlbiB2b29yZGF0IHplIGRhYWR3ZXJrZWxpamsgdWl0dmFsbGVuIChwcmVkaWN0aXZlIG1haW50ZW5hbmNlKS4KCmBgYHtyIG1lc3NhZ2U9RkFMU0UsIHdhcm5pbmc9RkFMU0V9CnNlY0RGIDwtIHJlYWQuY3N2KCJodHRwczovL3Jhdy5naXRodWJ1c2VyY29udGVudC5jb20vaGFuYmVkcmlqZnNrdW5kZS9pbS9tYXN0ZXIvd29ya3Nob3BzL2JpZ2RhdGEvZHJpdmVuZGF0YS5jc3YiKQpoZWFkKHNlY0RGKQpgYGAKPGhyPgoqKlZyYWFnIDE6KiogQmVvb3JkZWVsIGRlIGt3YWxpdGVpdCB2YW4gZGUgZGF0YS4KPGhyPgoKV2Uga3VubmVuIGRlIGt3YWxpdGVpdCB2YW4gZGUgZGF0YSB2ZXJkZXIgdmVya2VubmVuIGRvb3IgZGV6ZSB0ZSB2aXN1YWxpc2VyZW4uIFIgYmllZHQgdmVyc2NoaWxsZW5kZSBtb2dlbGlqa2hlZGVuOgoKLSBlZW52b3VkaWdlIGdyYWZpZWtlbgoKYGBge3J9CmNvbG9ycyA8LSBjKCJza3libHVlIiwgIm9yYW5nZSIsICJ0b21hdG8iKQpwIDwtIGdncGxvdChzZWNERikgKwogIGdlb21fYmFyKGFlcyh4ID0gcmVnaW9uLCBmaWxsID0gc3RhdHVzX2dyb3VwKSkgKwogIHNjYWxlX2ZpbGxfbWFudWFsKHZhbHVlcyA9IGNvbG9ycykgKwogIGNvb3JkX2ZsaXAoKQpwCmBgYAoKPGhyPgotIGdyYWZpZWtlbiBtZXQgaW50ZXJhY3RpZToKCmBgYHtyIG1lc3NhZ2U9RkFMU0UsIHdhcm5pbmc9RkFMU0UsIHBhZ2VkLnByaW50PUZBTFNFfQpnZ3Bsb3RseShwLCB3aWR0aCA9IDkwMCkKYGBgCgo8aHI+Ci0gZ2VvZ3JhcGhpc2NoZSB3ZWVyZ2F2ZSBtZXQgaW50ZXJhY3RpZSAoa2xpayBvcCBlZW4gY2lya2VsIHZvb3IgbWVlciBpbmZvcm1hdGllIHBlciB3YXRlcnB1bnQpCgpgYGB7ciBtZXNzYWdlPUZBTFNFLCB3YXJuaW5nPUZBTFNFLCBmaWcud2lkdGg9MTB9CgpzZWxERiA8LSBzZWNERlsxOjEwMCxdCnBhbCA8LSBjb2xvckZhY3Rvcihjb2xvcnMsIGRvbWFpbiA9IGMoImZ1bmN0aW9uYWwiLCAiZnVuY3Rpb25hbCBuZWVkcyByZXBhaXIiLCAibm9uIGZ1bmN0aW9uYWwiKSkKbGVhZmxldChzZWxERikgJT4lCiAgYWRkVGlsZXMoKSAlPiUKICBzZXRWaWV3KGxuZyA9IG1lYW4oc2VsREYkbG9uZ2l0dWRlKSwgbGF0ID0gbWVhbihzZWxERiRsYXRpdHVkZSksIHpvb20gPSA2KSAlPiUKICBhZGRDaXJjbGVNYXJrZXJzKH5sb25naXR1ZGUsIH4gbGF0aXR1ZGUsIHBvcHVwID0gfndwdF9uYW1lLCBjb2xvciA9IH5wYWwoc3RhdHVzX2dyb3VwKSkKYGBgCgo8aHI+Ci0gZW4gbm9nIHZlZWwgbWVlci4K